
import BackendjsFunctions from '@/core/BackendjsFunctions.js'
import { backendjsFunctions } from '@/core/functions.js'

export default {
  /**
   * 增加组件，同时重新渲染组件的父级容器
   * 通过传入的参数增加Component到容器中去，其中参数如下：
   * bjComponent._other._tmpContainerId 对应需要添加的容器ID
   * bjComponent._other._componentTypeName 需要添加的组件名称
   * bjComponent 数据基本上都是由 getComponent 提供
   * @param {*} bjComponent
   * @returns
   */
  addComponent (bjComponent) {
    BackendjsFunctions._verification('addComponent')
    try {
      return backendjsFunctions().addComponent(bjComponent)
    } catch (error) {
      console.error(error)
    }
    return null
  },
  /**
   * 通过参数添加Component数据，并且渲染
   * @param {*} containerTmpId 父级容器ID
   * @param {*} componentTypeName 组件名称 例如：componentTitle
   */
  addComponentParams (containerTmpId, componentTypeName) {
    BackendjsFunctions._verification('addComponentParams')
    try {
      return backendjsFunctions().addComponentParams(containerTmpId, componentTypeName)
    } catch (error) {
      console.error(error)
    }
    return null
  },

  /**
   * 通过参数添加公共组件 CommonComponent 数据，并且渲染
   * @param {*} containerTmpId 父级容器ID
   * @param {*} commonComponentTmpId 公共组件的 tmpId
   * @param {*} componentTypeName 组件名称 例如：componentTitle
   * @returns
   */
  addCommonComponentParams (containerTmpId, commonComponentTmpId, componentTypeName) {
    BackendjsFunctions._verification('addCommonComponentParams')
    try {
      return backendjsFunctions().addCommonComponentParams(containerTmpId, commonComponentTmpId, componentTypeName)
    } catch (error) {
      console.error(error)
    }
    return null
  },
  /**
   * 保存组件，通过参数中的数据，找到组件的位置进行组件数据替换，同时重新渲染组件
   */
  saveComponent (bjComponent) {
    BackendjsFunctions._verification('saveComponent')
    try {
      return backendjsFunctions().saveComponent(bjComponent)
    } catch (error) {
      console.error(error)
    }
    return null
  },
  /**
   * 通过传入的容器ID以及组件名称，生产vue可编辑的组件数据参数
   * @param {*} containerTmpId 父级容器ID
   * @param {*} componentTypeName 组件名称 例如：componentTitle
   */
  getComponent (containerTmpId, componentTypeName) {
    BackendjsFunctions._verification('getComponent')
    try {
      return backendjsFunctions().getComponent(containerTmpId, componentTypeName)
    } catch (error) {
      console.error(error)
    }
    return null
  },
  /**
  * 获取到所有的组件
  */
  getComponentType () {
    BackendjsFunctions._verification('getComponentType')
    try {
      return backendjsFunctions().getComponentType()
    } catch (error) {
      console.error(error)
    }
    return null
  },
  /**
   * 获取公共组件数据列表
   * @returns
   */
  getCommonComponentList () {
    BackendjsFunctions._verification('getCommonComponentList')
    try {
      return backendjsFunctions().getCommonComponentList()
    } catch (error) {
      console.error(error)
    }
    return null
  },
  /**
   * 通过容器的ID删除容器中的组件
   * @returns 返回被删除的组件
   */
  delComponentByTmpContainerId (containerTmpId) {
    BackendjsFunctions._verification('delComponentByTmpContainerId')
    try {
      return backendjsFunctions().delComponentByTmpContainerId(containerTmpId)
    } catch (error) {
      console.error(error)
    }
    return null
  },
  /**
    * 通过组件ID删除该组件
    * @returns 返回被删除的组件
    */
  delComponentByTmpId (tmpId) {
    BackendjsFunctions._verification('delComponentByTmpId')
    try {
      return backendjsFunctions().delComponentByTmpId(tmpId)
    } catch (error) {
      console.error(error)
    }
    return null
  },
  /**
   * 删除公共组件数据
   * @param {string} commonComponentTmpId 公共组件数据的 tmpId
   */
  delCommonComponentByTmpId (commonComponentTmpId) {
    BackendjsFunctions._verification('delCommonComponentByTmpId')
    try {
      return backendjsFunctions().delCommonComponentByTmpId(commonComponentTmpId)
    } catch (error) {
      console.error(error)
    }
    return null
  },
  /**
   * 更新公共组件名称
   * @param {string} commonComponentTmpId 公共组件数据的 tmpId
   * @param {string} commonComponentName  新的公共组件名
   */
  updateCommonComponentNameByTmpId (commonComponentTmpId, commonComponentName) {
    BackendjsFunctions._verification('updateCommonComponentNameByTmpId')
    try {
      return backendjsFunctions().updateCommonComponentNameByTmpId(commonComponentTmpId, commonComponentName)
    } catch (error) {
      console.error(error)
    }
    return null
  },
  /**
   * 显示组件的边框
   * @param {*} tmpId 组件的 tmpId 数据
   * @returns boolean
   */
  showBorderComponent (tmpId) {
    BackendjsFunctions._verification('showBorderComponent')
    try {
      return backendjsFunctions().showBorderComponent(tmpId)
    } catch (error) {
      console.error(error)
    }
    return null
  },
  /**
   * 隐藏组件的边框
   * @param {*} tmpId 组件的 tmpId 数据
   * @returns boolean
   */
  hideBorderComponent (tmpId) {
    BackendjsFunctions._verification('hideBorderComponent')
    try {
      return backendjsFunctions().hideBorderComponent(tmpId)
    } catch (error) {
      console.error(error)
    }
    return null
  },
  /**
   * 隐藏所有的组件边框
   * @returns boolean
   */
  hideAllBorderComponent () {
    BackendjsFunctions._verification('hideAllBorderComponent')
    try {
      return backendjsFunctions().hideAllBorderComponent()
    } catch (error) {
      console.error(error)
    }
    return null
  },
  /**
   * 根据组件的 tmpId ，页面滚动条定位
   * @param {*} tmpId 组件的 tmpId 数据
   * @returns boolean
   */
  scrollComponent (tmpId) {
    BackendjsFunctions._verification('scrollComponent')
    try {
      return backendjsFunctions().scrollComponent(tmpId)
    } catch (error) {
      console.error(error)
    }
    return null
  }
}
